package com.kevin.common.util;

import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;

/**
 * 解决Docker中无法加载文件的问题
 * https://hukanglu.blog.csdn.net/article/details/123746499?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-123746499-blog-121900961.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-123746499-blog-121900961.pc_relevant_default&utm_relevant_index=2
 * https://blog.csdn.net/lgq2016/article/details/121900961
 *
 * @author wh
 * @date 2022/6/16 15:37
 */
@Slf4j
public class LocalFileUtil {

    /**
     * 读取流转换为输出流
     *
     * @param filePath 路径
     * @return 路径
     */
    public static FastByteArrayOutputStream read2Stream(String filePath) {
        return IoUtil.read(FileUtil.getInputStream(filePath));
    }

    /**
     * 获取resource下的文件
     * 建议使用完毕直接删除
     *
     * @param resourcePath 文件路径
     * @return 文件 会在jvm退出时删除,不建议使用过多次
     */
    public static File readResource(String resourcePath) {
        File tempFile = FileUtil.createTempFile();
        FileUtil.writeFromStream(LocalFileUtil.class.getResourceAsStream(resourcePath), tempFile);
        tempFile.deleteOnExit();
        log.info("生成临时文件,读取路径:{},临时文件路径:{}", resourcePath, tempFile.getPath());
        return tempFile;
    }

    /**
     * 获取resource下的文件
     * 建议使用完毕直接删除
     *
     * @param resourcePath 文件路径
     * @return 文件 会在jvm退出时删除,不建议使用过多次
     */
    public static File readResource(String resourcePath, String prefix, String suffix) {
        File tempFile = FileUtil.createTempFile(prefix, suffix, true);
        FileUtil.writeFromStream(LocalFileUtil.class.getResourceAsStream(resourcePath), tempFile);
        tempFile.deleteOnExit();
        log.info("生成临时文件,读取路径:{},临时文件路径:{}", resourcePath, tempFile.getPath());
        return tempFile;
    }
}
